昨天完成了消費修改功能之後,還有一個小尾巴——刪除功能的意圖判斷雖然已經跑通,但主程式還沒有真正接上。原本以為今天可以很快把它補完收工,沒想到實際做下來,反而多了一個很重要的體會:
「能修改、能刪除」是一回事,但真正好用的記帳工具,還必須讓使用者能快速找回自己的消費紀錄。
所以今天除了完成昨天暫留下來的「刪除消費」功能,也把原本已經存在的消費查詢能力重新整理,讓 SubWise 開始從「可以記帳」往「可以幫我整理帳目」前進。
昨天已經完成刪除功能的大部分程式邏輯,Gemini 也能正確辨識「把 2026-07-31 那筆 120 元刪掉」這類指令,回傳:
{"type": "expense_delete", "date": "2026-07-31", "keyword": None, "old_amount": 120}
但一開始 LINE Bot 並沒有真的執行刪除。檢查 app.py 後發現,問題不是 Gemini,而是主程式還沒有完整接上 expense_delete 的處理流程。補上:
elif data_type == "delete_expense":
讓它交給 delete_expense(data),再透過 Google Sheets 端的刪除函式,實際移除對應的資料列。
這次也特別處理了一個很重要的安全問題。假設 Google Sheets 裡剛好有兩筆「2026-08-21 / 100 元」(一筆 Food、一筆 Transport),SubWise 不能隨便挑一筆刪掉。因此加入了三層判斷:
找不到:「找不到符合條件的消費資料,請提供更明確的日期或金額。」
找到多筆:「找到多筆符合的消費資料,為避免誤刪,請提供更明確的日期或金額。」
只有一筆:才真正執行刪除
這讓「刪除」不只是功能有做出來,而是多了一層避免誤刪的防呆機制。
刪除完成後,開始重新思考使用者真正會怎麼使用記帳 Bot。如果每天只是說「午餐 120 元」讓資料丟進 Google Sheets,那 SubWise 比較像是一個「記帳輸入工具」;但使用者更常遇到的問題其實是「我最近花了什麼?」「我這個月到底花多少?」這些都屬於「查帳」需求,因此決定把原本的查詢功能再強化。
1. 消費日期排序 — 新增 sort_expenses_by_date(),把消費按照日期從新到舊排序,讓使用者看到的第一筆永遠是最近的消費。
2. 加入「最高單筆消費」 — 新增 find_highest_expense(records),從查詢結果裡找出最高的一筆消費,讓 SubWise 能回答「這段期間裡哪一筆花最多」。
3. 讓查詢結果更像「摘要」,而不是資料表 — 今天最重要的改變不是新增某一個函式,而是重新設計了 LINE 的回覆方式。以前只是把消費資料列出來,現在改成一次整理出查詢期間、總支出、消費筆數、最高單筆消費、最近消費五項資訊:
💰 SubWise 消費查詢
📅 查詢期間:week
💵 總支出:NT$570
🧾 消費筆數:4 筆
🔥 最高單筆消費
📅 日期:2026-08-21
💵 金額:NT$300
📂 分類:Shopping
📝 備註:生活用品
📋 最近消費:
2026-08-21|Shopping|NT$300|生活用品
2026-08-20|Food|NT$120|午餐
2026-08-19|Transport|NT$50|捷運
2026-08-18|Food|NT$100|早餐
這已經不只是「查資料」,而是開始替使用者做一層簡單的資訊整理。
測試一:查詢最近消費
輸入「我最近有哪些消費?」,SubWise 成功回覆本週總支出 NT$2439、10 筆消費,並標出最高單筆消費(NT$1089,Entertainment),同時列出最近 10 筆消費明細。代表 LINE → Gemini → 判斷 query → query_service → Google Sheets → 整理資料 → LINE 這條流程已經成功串起來。
測試二:查詢本月消費
輸入「我這個月花了多少錢」,SubWise 成功判斷 period = month,回覆本月總支出 NT$3459、16 筆消費,並列出本月消費明細。代表今天新增的查詢邏輯,不只是 Python 裡測試成功,而是已經真正進入 LINE Bot。
刪除功能就是一個很好的例子。Gemini 明明已經可以正確理解 expense_delete,Python 測試也能成功刪除,但如果 app.py 沒有接上對應的處理分支,使用者在 LINE 上操作時,功能還是不存在。
查詢功能也不是單純新增一個 print() 就結束,真正要讓使用者覺得好用,還需要思考資料應該怎麼排序、要不要顯示總額與筆數、哪一筆最值得提醒、LINE 訊息怎麼排版才不會太亂——這些都不是「寫一個函式」就能解決的問題,也讓我更理解這次鐵人賽真正想練習的:不是把程式碼寫出來,而是透過 AI 協作,一步一步把產品做得更完整。
expense_delete 意圖串接(app.py 補上 delete_expense 分支)sort_expenses_by_date(),消費依日期新到舊排序find_highest_expense(),找出查詢期間內最高單筆消費目前 SubWise 已經具備:
| 能力 | 說明 |
|---|---|
| 📝 記帳 | 透過自然語言建立消費紀錄 |
| ✏️ 修改 | 修改分類/金額/項目/備註,含錯誤分類防呆 |
| 🗑️ 刪除 | 依日期與金額定位刪除,含找不到/多筆防呆 |
| 🔎 查閱 | 自然語言詢問「最近花了什麼」「這個月花多少」 |
| 📊 查閱摘要 | 自動整理總支出、筆數、最高單筆、最近消費 |
目前 SubWise 已經補齊了消費資料的「新增、修改、刪除、查詢」四項基本能力,接下來 Day 23 可以開始把重心轉往訂閱管理這一塊,讓使用者一樣能用自然語言查詢、修改、甚至刪除訂閱資料,讓 SubWise 對「消費」與「訂閱」兩種資料的管理能力保持一致。我們明天見!